#include "AdministradorABM.h"
using namespace ABM;

AdministradorABM::AdministradorABM() :
	IAbm("Administrador") {
	this->manejadorAdministrador = new ManejadorAdministrador();

}

bool AdministradorABM::altaInterna(string usr, string pass) {

	usr = Utils::aMinuscula(usr);
	pass = Utils::aMinuscula(pass);

	Administrador* admin = new Administrador();
	admin->setUsuario(usr);
	admin->setContrasenia(pass);
	bool resultado = manejadorAdministrador->alta(admin);

	delete admin;
	return resultado;
}

bool AdministradorABM::alta() {
	string usr = "";
	string contrasenia = "";
	bool resultado = false;

	cout << "Ingrese el Usuario ADMIN: ";
	getline(cin,usr);
	usr = Utils::aMinuscula(usr);
	cout << "Ingrese la CONTRASEÑA: ";
	getline(cin, contrasenia);
	contrasenia = Utils::aMinuscula(contrasenia);
	
	if (!this->manejadorAdministrador->existe(usr))
		resultado = altaInterna(usr, contrasenia);
	else{
		cout << "Usuario ya existente!!!" << endl;
		resultado = false;
	}
	return resultado;
}

bool AdministradorABM::baja() {
	bool resultado;
	Administrador* admin = new Administrador();

	string usr = "";
	string contrasenia = "";
	cout << "Ingrese el Usuario ADMIN: ";
	cin >> usr;
	cout << "Ingrese la CONTRASEÑA: ";
	cin >> contrasenia;

	admin->setUsuario(Utils::aMinuscula(usr));
	admin->setContrasenia(Utils::aMinuscula(contrasenia));

	resultado = this->manejadorAdministrador->baja(admin);

	delete admin;

	return resultado;
}

bool AdministradorABM::modificacion(){
	cout << "Los ADMINISTRADORES no tiene campos modificables" << endl;
	getchar();

	return false;
}

void AdministradorABM::altaMasiva(){
	ArchivoAltasMasivas* arch = new ArchivoAltasMasivas("administradorCargaMasiva.txt");
	string linea;
	linea = arch->leerLinea();
	while (!arch->finDeArchivo()) {
		vector<string>* campos = Parser::separarCampos(&linea, separadorCampos);
		//como son administradores se que tiene 2 campos. usr y pass
		if(campos->size() == 2){
			for (int i = 0; i < 2; ++i) {
				Parser::reemplazarCaracter(&campos->at(i), separadorPalabras, blanco);
			}
			altaInterna(Utils::aMinuscula(campos->at(0)), Utils::aMinuscula(campos->at(1)));
			linea = arch->leerLinea();
		}
		this->log->escribir("Se genero Alta Masiva de Administrador.");
	}

	delete arch;
}

AdministradorABM::~AdministradorABM() {
}
